package android.slc.query;

import android.slc.query.entity.QDateRange;
import android.slc.utils.SlcTimeUtils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import org.apache.commons.lang3.StringUtils;

public class DateRangeVerifyUtils {
    /**
     * 验证是否存在查询条件
     *
     * @param qDateRange
     */
    public static void verify(QDateRange qDateRange) {
        if (qDateRange == null) {
            throw new RuntimeException("请选择查询条件");
        }
    }

    /**
     * 校验开始时间是否存在
     *
     * @param qDateRange
     */
    public static void verifyTimeStart(QDateRange qDateRange) {
        verify(qDateRange);
        if (StringUtils.isEmpty(qDateRange.getTimeStart())) {
            throw new RuntimeException("请选择开始时间");
        }
    }


    /**
     * 校验结束时间是否存在
     *
     * @param qDateRange
     */
    public static void verifyTimeEnd(QDateRange qDateRange) {
        verify(qDateRange);
        if (StringUtils.isEmpty(qDateRange.getTimeEnd())) {
            throw new RuntimeException("请选择结束时间");
        }
    }

    /**
     * 检验开始和结束时间是否存在
     *
     * @param qDateRange
     */
    public static void verifyTime(QDateRange qDateRange) {
        verifyTimeStart(qDateRange);
        verifyTimeEnd(qDateRange);
    }

    /**
     * 校验年月日是否合法
     *
     * @param qDateRange
     */
    public static void verifyTimeLicit(QDateRange qDateRange) {
        verifyYmdLicit(qDateRange, "开始时间不得大于结束时间");
    }

    public static void verifyYmdLicit(QDateRange qDateRange, String errorMsg) {
        verifyTime(qDateRange);
        try {
            long timeStartM = DateUtil.parse(qDateRange.getTimeStart(), DatePattern.NORM_DATE_PATTERN).getTime();
            long timeEndM = DateUtil.parse(qDateRange.getTimeEnd(), DatePattern.NORM_DATE_PATTERN).getTime();
            if (timeStartM > timeEndM) {
                throw new RuntimeException(errorMsg);
            }
        } catch (Exception e) {
            throw new RuntimeException("时间格式错误");
        }
    }

    /**
     * 格式化时间
     *
     * @param qDateRange
     */
    public static void formatTime2Local(QDateRange qDateRange) {
        formatTime2Local(qDateRange, DatePattern.NORM_DATE_PATTERN);
    }

    public static void formatTime2Local(QDateRange qDateRange, String pattern) {
        try {
            if (StringUtils.isNotEmpty(qDateRange.getTimeStart())) {
                qDateRange.setTimeStartByLocalDate(SlcTimeUtils.date2LocalDate(DateUtil.parse(qDateRange.getTimeStart(), pattern)));
            }
            if (StringUtils.isNotEmpty(qDateRange.getTimeEnd())) {
                qDateRange.setTimeEndByLocalDate(SlcTimeUtils.date2LocalDate(DateUtil.parse(qDateRange.getTimeEnd(), pattern)));
            }
        } catch (Exception e) {
            throw new RuntimeException("时间格式错误");
        }
    }
}
